perm filename SEND.MID[NET,MRC] blob sn#330531 filedate 1978-01-22 generic text, type C, neo UTF8
COMMENT ⊗   VALID 00006 PAGES
C REC  PAGE   DESCRIPTION
C00001 00001
C00002 00002	TITLE SNDMSG
C00004 00003	SET UP CONNECTION
C00006 00004	SEND THE COMMAND
C00008 00005	SEND MESSAGE HEADER
C00010 00006	GET AND SEND THE MESSAGE
C00011 ENDMK
C⊗;
TITLE SNDMSG

; QUICK NETWORK SEND KLUDGE UNTIL BH MAKES MAIL DO THE RIGHT THING.

NIORTS==-1 ? ERRHAN==-1 ? HSTTAB==-1 ; MARVELOUS NETWORK ROUTINES
.INSRT NETWRK[NET,MRC]

CORBEG==.
CMDP:	BLOCK 1.
LUZEP:	BLOCK 1.
PDL:	BLOCK 20.
USRBUF:	BLOCK 10.
HSTBUF:	BLOCK 10.
COREND==.-1

SUBTTL INITIALIZATION AND COMMAND PARSING

SNDMSG:	JFCL
	RESET
	MOVE 17,[PDL(-20)]
	SETZM CORBEG
	MOVE [CORBEG,,CORBEG+1]
	BLT COREND
	RESCAN
CMDSCN:	INCHRS
	 JRST TOPRMT
	CAIE ↑J
	 CAIN 175
	  JRST TOPRMT
	CAIE ";
	 JRST CMDSCN
	CAIA
TOPRMT:	 OUTSTR [ASCIZ/To: /]

; GET USER NAME

	MOVE 1,[440700,,USRBUF]
GETUSR:	INCHWL
	CAIN ↑M
	 JRST GETUSR
	CAIE 175
	 CAIN ↑J
	  JRST [OUTSTR [ASCIZ/Missing host name./]
		JRST SPCLUZ]
	CAIE "%				; CRETIN SAIL CONVENTION
	 CAIN "@
	  JRST GETHST
	IDPB 1
	JRST GETUSR

; GET HOST NAME

GETHST:	MOVE 1,[440700,,HSTBUF]
	SKIPE USRBUF
	 JRST GETHCH
	OUTSTR [ASCIZ/Missing user name./]
SPCLUZ:	OUTSTR [ASCIZ/  You must say <user>@<host>.
/]
	CLRBFI
	JRST SNDMSG

GETHCH:	INCHWL
	CAIN <" >
	 JRST GOGO
	CAIN ↑M
	 JRST GETHCH
	CAIE 175
	 CAIN ↑J
	  JRST GOGOGO
	IDPB 1
	JRST GETHCH
SUBTTL SET UP CONNECTION

; FIRE UP A CONNECTION

GOGO:	SETOM CMDP
GOGOGO:	PUSHJ 17,MAPHST
	MOVEI HSTBUF
	PUSHJ 17,HSTNAM
	 JRST [	OUTSTR [ASCIZ/No such host.
/]
		CLRBFI
		PUSHJ 17,UNMHST
		JRST SNDMSG]
	 JRST [	OUTSTR [ASCIZ/Ambiguous host name.
/]
		CLRBFI
		PUSHJ 17,UNMHST
		JRST SNDMSG]
	MOVEM HOST
	PUSHJ 17,UNMHST
	MOVEI 3
	MOVEM ICPSKT
	PUSHJ 17,CONECT

; EAT UP THE GREETING MESSAGE

GRTEAT:	SETZM LUZEP
	IRPC GARPLY,,[300 ]
	 PUSHJ 17,NETICW
	 CAIE "GARPLY
	  SETOM LUZEP
	TERMIN
GRTFLS:	PUSHJ 17,NETICW			; FLUSH TEXT OF GREETING
	CAIE ↑J
	 JRST GRTFLS
	SKIPE LUZEP
	 JRST GRTEAT			; GOT OTHER THAN "300 "
SUBTTL SEND THE COMMAND

	IRPC GARPLY,,[XSEN ]
	 MOVEI "GARPLY
	 PUSHJ 17,NETOCH
	TERMIN
	MOVE 1,[440700,,USRBUF]
SNDUSR:	ILDB 1
	JUMPE SNTUSR
	PUSHJ 17,NETOCH
	JRST SNDUSR
SNTUSR:	MOVEI ↑M ? PUSHJ 17,NETOCH
	MOVEI ↑J ? PUSHJ 17,NETOCH
	PUSHJ 17,NETSND			; FORCE COMMAND OUT

; GET SERVER REPLY

GETREP:	PUSHJ 17,NETICW
	CAIE "0
	 JRST WINNER

; HERE FOR LOSING SERVERS WHO SEND CRETIN COMMENTS!

	REPEAT 3,PUSHJ 17,NETICW
LOSER:	PUSHJ 17,NETICW
	OUTCHR
	CAIE ↑J
	 JRST LOSER
	JRST GETREP

; FINALLY WINNING

WINNER:	CAIE "3
	 SETOM LUZEP
	PUSHJ 17,NETICW
	CAIE "5
	 SETOM LUZEP
	PUSHJ 17,NETICW
	CAIE "0
	 SETOM LUZEP
	PUSHJ 17,NETICW
	SKIPE LUZEP
	 JRST OOPS
	PUSH 17,
REPFLS:	PUSHJ 17,NETICW
	CAIE ↑J
	 JRST REPFLS
	POP 17,
	CAIN "-
	 JRST GETREP			; BAGBITING MULTI-LINE REPLIES!
; FALLS THROUGH
SUBTTL SEND MESSAGE HEADER

; CONS UP A WINNING HEADER

	GETPPN 1,
	 JFCL
	HRLZS 1
PNLOOP:	SETZ
	LSHC 6
	JUMPE PNLOOP
	ADDI "A-'A
	PUSHJ 17,NETOCH
	JUMPN 1,PNLOOP
	IRPC GARPLY,,[@SAIL ]
	 MOVEI "GARPLY
	 PUSHJ 17,NETOCH
	TERMIN

; DATE/TIME.  OPEN-CODED (OF COURSE!!!)

	DATE 1,
	IDIVI 1,12.*31.			; YEAR → 1, YEARDAYS → 2
	IDIVI 2,12.			; MONTH → 2, DAYS → 3
	EXCH 2,3
	ADDI 3,1
	IDIVI 3,10.
	MOVEI "0(3)
	PUSHJ 17,NETOCH
	MOVEI "0(4)
	PUSHJ 17,NETOCH
	MOVEI "/
	PUSHJ 17,NETOCH
	ADDI 2,1
	IDIVI 2,10.
	MOVEI "0(2)
	PUSHJ 17,NETOCH
	MOVEI "0(3)
	PUSHJ 17,NETOCH
	MOVEI "/
	PUSHJ 17,NETOCH
	ADDI 1,64.
	IDIVI 1,10.
	MOVEI "0(1)
	PUSHJ 17,NETOCH
	MOVEI "0(2)
	PUSHJ 17,NETOCH
	MOVEI <" >
	PUSHJ 17,NETOCH
	MSTIME 1,
	IDIVI 1,1000.
	IDIVI 1,60.*60.
	IDIVI 2,60.
	EXCH 1,3
	IDIVI 3,10.
	MOVEI "0(3)
	PUSHJ 17,NETOCH
	MOVEI "0(4)
	PUSHJ 17,NETOCH
	MOVEI ":
	PUSHJ 17,NETOCH
	IDIVI 2,10.
	MOVEI "0(2)
	PUSHJ 17,NETOCH
	MOVEI "0(3)
	PUSHJ 17,NETOCH
	MOVEI ":
	PUSHJ 17,NETOCH
	IDIVI 1,10.
	MOVEI "0(1)
	PUSHJ 17,NETOCH
	MOVEI "0(2)
	PUSHJ 17,NETOCH
	MOVEI ↑M
	PUSHJ 17,NETOCH
	MOVEI ↑J
	PUSHJ 17,NETOCH
; FALLS THROUGH
SUBTTL GET AND SEND THE MESSAGE

; NOW GET USER'S MESSAGE

	SKIPN CMDP
	 OUTSTR [ASCIZ/Enter message, terminated with αβLF.
/]
GETMSG:	INCHWL
	SKIPE CMDP
	 CAIE ↑J
	  CAIN 600\↑J
	   JRST MSGDUN
	ANDI 177
	PUSHJ 17,NETOCH
	JRST GETMSG
MSGDUN:	CAIN ↑J
	 PUSHJ 17,NETOCH
	MOVE 1,[440700,,[ASCIZ/
.
/]]
MSGDCH:	ILDB 1
	JUMPE MSGFRC
	PUSHJ 17,NETOCH
	JRST MSGDCH
MSGFRC:	PUSHJ 17,NETSND
	IRPC GARPLY,,[256]
	 PUSHJ 17,NETICW
	 CAIE "GARPLY
	  SETOM LUZEP
	TERMIN
	SKIPN LUZEP
	 EXIT

; OOPS, WE LOST

OOPS:	PUSHJ 17,NETICW
	OUTCHR
	CAIE ↑J
	 JRST OOPS
	CLRBFI
	EXIT

END SNDMSG